async function a() {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      resolve(100);
    }, 5000);
  });
}

async function b() {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      resolve(200);
    }, 10000);
  });
}

let arr = [];

arr.push(b, a);

let promise = arr.map((cb) => cb());

// 这样打印出来的结果是 200 ,100 等到 b 函数返回的时候，a 函数返回已经进入 resolved 状态，await 的结果会直接拿到 a 函数的返回值，即a 函数不需要等待 5 秒，这样就实现了并行执行，只需要等待最长时间的那个即可

(async () => {
  for (let value of promise) {
    console.log(value);

    let data = await value;

    console.log(data);
  }
})();
